//public class MyThread {
//    public static int count=0;
//    public static void main(String[] args) throws InterruptedException {
////        使用两个线程来累加 count 的值
////        每个线程循环 1w 次，累加变量 count 的值，count 默认值为 0，注意线程安全问题。
//        Object lock1 = new Object();
//        Thread t1 = new Thread(()->{
//            int i=10000;
//            synchronized (lock1) {
//                while (i > 0) {
//                    i--;
//                    count += 1;
//                }
//            }
//        });
//        Thread t2 = new Thread(()->{
//            synchronized (lock1) {
//                for (int i = 0; i < 10000; i++) {
//                    count += 1;
//                }
//            }
//        });
//        t1.start();
//        t2.start();
//        t1.join();
//        t2.join();
//        System.out.println(count);
//    }
//}

//有三个线程，分别只能打印A，B和C
//要求按顺序打印ABC，打印10次
//public class MyThread {
//    public static int count=0;
//    public static void main(String[] args) {
//        Object locker = new Object();
//        Thread thread1 = new Thread(()->{
//            for (int i = 0; i < 10; i++) {
//                synchronized (locker) {
//                    while (count % 3 != 0) {
//                        try {
//                            locker.wait();
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    }
//                    System.out.print("A");
//                    count++;
//                    locker.notifyAll();
//                }
//            }
//        });
//        Thread thread2 = new Thread(()->{
//            for (int i = 0; i < 10; i++) {
//                synchronized (locker) {
//                    while(count%3!=1){
//                        try {
//                            locker.wait();
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    }
//                    count++;
//                    System.out.print("B");
//                    locker.notifyAll();
//                }
//            }
//        });
//        Thread thread3 = new Thread(()->{
//            for (int i = 0; i < 10; i++) {
//                synchronized (locker) {
//                    while(count%3!=2){
//                        try {
//                            locker.wait();
//                        } catch (InterruptedException e) {
//                            throw new RuntimeException(e);
//                        }
//                    }
//                    count++;
//                    System.out.println("C");
//                    locker.notifyAll();
//                }
//            }
//        });
//
//            thread1.start();
//            thread2.start();
//            thread3.start();
//
//    }
//
//}


//有三个线程，线程名称分别为：a，b，c。
//        每个线程打印自己的名称。
//        需要让他们同时启动，并按 c，b，a的顺序打印


public class MyThread {
    public static void main(String[] args) throws InterruptedException {
        Thread tc = new Thread(() -> {
            System.out.print(Thread.currentThread().getName() + " ");
        }, "c");

        Thread tb = new Thread(() -> {
            try {
                tc.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 打印b
            System.out.print(Thread.currentThread().getName() + " ");
        }, "b");

        Thread ta = new Thread(() -> {
            try {
                tb.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.print(Thread.currentThread().getName() + " ");
        }, "a");

        ta.start();
        tb.start();
        tc.start();
    }
}